home *** CD-ROM | disk | FTP | other *** search
- unit ObjArrTestFm;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls,
- ObjectArrayUnit;
-
- type
- TForm1 = class(TForm)
- NormalBtn: TButton;
- Memo1: TMemo;
- FastBtn: TButton;
- FasterBtn: TButton;
- procedure NormalBtnClick(Sender: TObject);
- procedure FastBtnClick(Sender: TObject);
- procedure FasterBtnClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- {$O-}
- procedure CreateObjectArray(AllocateCount: Cardinal);
- var
- i : integer;
- List: TList;
- TinyObject: TTinyObject;
- begin
- List := TList.Create;
- try
- List.Capacity := AllocateCount;
- for i := 0 to AllocateCount-1 do
- begin
- TinyObject := TTinyObject.Create;
- TinyObject.Value := i;
- TinyObject.Name := 'ABC';
- List.Add(TinyObject);
- end;
- finally
- for i := 0 to List.Count-1 do
- TTinyObject(List[i]).Free;
- List.Free;
- end;
- end;
-
- procedure CreateObjectArrayFast(AllocateCount: Cardinal);
- var
- i : integer;
- List: TList;
- TinyObject: TTinyObject;
- begin
- TFastTinyObject.InitObjectStore(AllocateCount);
- try
- List := TList.Create;
- try
- List.Capacity := AllocateCount;
- for i := 0 to AllocateCount-1 do
- begin
- TinyObject := TFastTinyObject.Create;
- TinyObject.Value := i;
- TinyObject.Name := 'ABC';
- List.Add(TinyObject);
- end;
- finally
- for i := 0 to List.Count-1 do
- TObject(List[i]).Free;
- List.Free;
- end;
- finally
- TFastTinyObject.FreeObjectStore;
- end;
- end;
-
- procedure CreateObjectArrayFaster(AllocateCount: Cardinal);
- var
- i : integer;
- List: TList;
- TinyObject: TTinyObject;
- begin
- TFasterTinyObject.InitObjectStore(AllocateCount);
- try
- List := TList.Create;
- try
- List.Capacity := AllocateCount;
- for i := 0 to AllocateCount-1 do
- begin
- TinyObject := TFasterTinyObject.Create;
- TinyObject.Value := i;
- TinyObject.Name := 'ABC';
- List.Add(TinyObject);
- end;
- finally
- for i := 0 to List.Count-1 do
- TObject(List[i]).Free;
- List.Free;
- end;
- finally
- TFasterTinyObject.FreeObjectStore;
- end;
- end;
-
- const
- AllocateCount = 100000;
-
- procedure TForm1.NormalBtnClick(Sender: TObject);
- var
- StartTick, EndTick: Cardinal;
- begin
- StartTick := GetTickCount;
- CreateObjectArray(AllocateCount);
- EndTick := GetTickCount;
- Memo1.Lines.Add(Format('Normal Create: %d', [EndTick-StartTick]));
- end;
-
- procedure TForm1.FastBtnClick(Sender: TObject);
- var
- StartTick, EndTick: Cardinal;
- begin
- StartTick := GetTickCount;
- CreateObjectArrayFast(AllocateCount);
- EndTick := GetTickCount;
- Memo1.Lines.Add(Format('Fast Create: %d', [EndTick-StartTick]));
- end;
-
- procedure TForm1.FasterBtnClick(Sender: TObject);
- var
- StartTick, EndTick: Cardinal;
- begin
- StartTick := GetTickCount;
- CreateObjectArrayFaster(AllocateCount);
- EndTick := GetTickCount;
- Memo1.Lines.Add(Format('Faster Create: %d', [EndTick-StartTick]));
- end;
-
- end.
-